import { IPSAppDEField } from '../../app/dataentity/ipsapp-defield';
import { IPSEditorContainer } from '../ipseditor-container';
import { IPSDEFormDetail } from './ipsdeform-detail';
import { IPSDEFormItemUpdate } from './ipsdeform-item-update';
import { IPSLanguageRes } from '../../res/ipslanguage-res';
import { IPSSysImage } from '../../res/ipssys-image';

/**
 *
 * 继承父接口类型值[FORMITEM]
 * @export
 * @interface IPSDEFormItem
 */
export interface IPSDEFormItem extends IPSDEFormDetail, IPSEditorContainer {
  /**
   * 标题
   * @type {string}
   */
  caption: string;

  /**
   * 动态标题绑定值项
   * @type {string}
   */
  captionItemName: string;

  /**
   * 建立默认值
   * @type {string}
   */
  createDV: string;

  /**
   * 建立默认值类型
   * @description 值模式 [实体属性界面项默认值类型] {SESSION：用户全局对象、 APPLICATION：系统全局对象、 UNIQUEID：唯一编码、 CONTEXT：网页请求、 PARAM：数据对象属性、 OPERATOR：当前操作用户(编号)、 OPERATORNAME：当前操作用户(名称)、 CURTIME：当前时间、 APPDATA：当前应用数据 }
   * @type {( string | 'SESSION' | 'APPLICATION' | 'UNIQUEID' | 'CONTEXT' | 'PARAM' | 'OPERATOR' | 'OPERATORNAME' | 'CURTIME' | 'APPDATA')}
   */
  createDVT: string | 'SESSION' | 'APPLICATION' | 'UNIQUEID' | 'CONTEXT' | 'PARAM' | 'OPERATOR' | 'OPERATORNAME' | 'CURTIME' | 'APPDATA';

  /**
   * 标准数据类型
   * @description 值模式 [属性标准数据类型] {0：UNKNOWN、 1：BIGINT、 2：BINARY、 3：BIT、 4：CHAR、 5：DATETIME、 6：DECIMAL、 7：FLOAT、 8：IMAGE、 9：INT、 10：MONEY、 11：NCHAR、 12：NTEXT、 13：NVARCHAR、 14：NUMERIC、 15：REAL、 16：SMALLDATETIME、 17：SMALLINT、 18：SMALLMONEY、 19：SQL_VARIANT、 20：SYSNAME、 21：TEXT、 22：TIMESTAMP、 23：TINYINT、 24：VARBINARY、 25：VARCHAR、 26：UNIQUEIDENTIFIER、 27：DATE、 28：TIME、 29：BIGDECIMAL }
   * @type {( number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29)}
   */
  dataType: number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29;

  /**
   * 启用条件
   * @description 值模式 [实体表单表单项启用条件] {0：无、 1：建立、 2：更新、 3：全部 }
   * @type {( number | 0 | 1 | 2 | 3)}
   */
  enableCond: number | 0 | 1 | 2 | 3;

  /**
   * 绑定属性
   * @type {string}
   */
  fieldName: string;

  /**
   * 忽略输入模式
   * @type {number}
   */
  ignoreInput: number;

  /**
   * 输入提示信息
   * @type {string}
   */
  inputTip: string;

  /**
   * 输入提示链接
   * @type {string}
   */
  inputTipUrl: string;

  /**
   * 表单项高度
   * @type {number}
   * @default 0.0
   */
  itemHeight: number;

  /**
   * 表单项宽度
   * @type {number}
   * @default 0.0
   */
  itemWidth: number;

  /**
   * 标签直接样式
   * @type {string}
   */
  labelCssStyle: string;

  /**
   * 标签动态样式表
   * @type {string}
   */
  labelDynaClass: string;

  /**
   * 标签位置
   * @description 值模式 [云实体表单表单项标签位置] {LEFT：左边、 TOP：上方、 RIGHT：右边、 BOTTOM：下方、 NONE：不显示 }
   * @type {( string | 'LEFT' | 'TOP' | 'RIGHT' | 'BOTTOM' | 'NONE')}
   */
  labelPos: string | 'LEFT' | 'TOP' | 'RIGHT' | 'BOTTOM' | 'NONE';

  /**
   * 标签宽度
   * @type {number}
   */
  labelWidth: number;

  /**
   * 无权限显示模式
   * @description 值模式 [应用无权限内容显示模式] {1：显示空或*内容、 2：隐藏 }
   * @type {( number | 1 | 2)}
   */
  noPrivDisplayMode: number | 1 | 2;

  /**
   * 输出代码表配置模式
   * @description 值模式 [实体属性界面配置输出代码表配置] {0：无、 1：只输出选择项、 2：输出子项 }
   * @type {( number | 0 | 1 | 2)}
   * @default 0
   */
  outputCodeListConfigMode: number | 0 | 1 | 2;

  /**
   * 输入提示语言资源
   *
   * @type {IPSLanguageRes}
   */
  getPHPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 输入提示语言资源
   *
   * @type {IPSLanguageRes}
   */
  get pHPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 输入提示语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getPHPSLanguageResMust(): IPSLanguageRes;

  /**
   * 应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getPSAppDEField(): IPSAppDEField | null;

  /**
   * 应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get psAppDEField(): IPSAppDEField | null;

  /**
   * 应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 表单项更新
   *
   * @type {IPSDEFormItemUpdate}
   */
  getPSDEFormItemUpdate(): IPSDEFormItemUpdate | null;

  /**
   * 表单项更新
   *
   * @type {IPSDEFormItemUpdate}
   */
  get psDEFormItemUpdate(): IPSDEFormItemUpdate | null;

  /**
   * 表单项更新（必须存在）
   *
   * @type {IPSDEFormItemUpdate}
   */
  getPSDEFormItemUpdateMust(): IPSDEFormItemUpdate;

  /**
   * 表单项图片对象
   *
   * @type {IPSSysImage}
   */
  getPSSysImage(): IPSSysImage | null;

  /**
   * 表单项图片对象
   *
   * @type {IPSSysImage}
   */
  get psSysImage(): IPSSysImage | null;

  /**
   * 表单项图片对象（必须存在）
   *
   * @type {IPSSysImage}
   */
  getPSSysImageMust(): IPSSysImage;

  /**
   * 重置项名称
   * @type {string}
   */
  resetItemName: string;

  getResetItemNames(): string[] | null;

  get resetItemNames(): string[] | null;

  /**
   * 单位名称
   * @type {string}
   */
  unitName: string;

  /**
   * 单位宽度
   * @type {number}
   * @default 0
   */
  unitNameWidth: number;

  /**
   * 更新默认值
   * @type {string}
   */
  updateDV: string;

  /**
   * 更新默认值类型
   * @description 值模式 [实体属性界面项默认值类型] {SESSION：用户全局对象、 APPLICATION：系统全局对象、 UNIQUEID：唯一编码、 CONTEXT：网页请求、 PARAM：数据对象属性、 OPERATOR：当前操作用户(编号)、 OPERATORNAME：当前操作用户(名称)、 CURTIME：当前时间、 APPDATA：当前应用数据 }
   * @type {( string | 'SESSION' | 'APPLICATION' | 'UNIQUEID' | 'CONTEXT' | 'PARAM' | 'OPERATOR' | 'OPERATORNAME' | 'CURTIME' | 'APPDATA')}
   */
  updateDVT: string | 'SESSION' | 'APPLICATION' | 'UNIQUEID' | 'CONTEXT' | 'PARAM' | 'OPERATOR' | 'OPERATORNAME' | 'CURTIME' | 'APPDATA';

  /**
   * 值格式化
   * @type {string}
   */
  valueFormat: string;

  /**
   * 允许空值输入
   * @type {boolean}
   */
  allowEmpty: boolean;

  /**
   * 复合表单项
   * @type {boolean}
   * @default false
   */
  compositeItem: boolean;

  /**
   * 转换为代码项文本
   * @type {boolean}
   * @default false
   */
  convertToCodeItemText: boolean;

  /**
   * 是否空白标签
   * @type {boolean}
   * @default false
   */
  emptyCaption: boolean;

  /**
   * 提供锚点
   * @type {boolean}
   * @default false
   */
  enableAnchor: boolean;

  /**
   * 支持输入提示
   * @type {boolean}
   * @default false
   */
  enableInputTip: boolean;

  /**
   * 启用项权限控制
   * @type {boolean}
   * @default false
   */
  enableItemPriv: boolean;

  /**
   * 支持单位
   * @type {boolean}
   * @default false
   */
  enableUnitName: boolean;

  /**
   * 隐藏表单项
   * @type {boolean}
   * @default false
   */
  hidden: boolean;

  /**
   * 输入提示支持关闭
   * @type {boolean}
   * @default false
   */
  inputTipClosable: boolean;

  /**
   * 需要代码表配置
   * @type {boolean}
   * @default false
   */
  needCodeListConfig: boolean;
}
